package reflect;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * 注解 JDK5之后推出的一个特性,可在程序运行时被反射机制中使用,提高代码的灵活度
 * 注解不等同于注释,它是会被保留在编译后的字节码文件中共我们使用的。
 *
 * 注解的格式：
 * @注解名
 *
 * 注解名实际上要对应一个java类声明的注解.
 * 后面学习的框架中注解被广泛使用.
 */
public class ReflectDemo10 {
    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, InvocationTargetException {
        //获取Person类中被@AutoRun标注的方法
        Class cls = Class.forName("reflect.Person");
        Object o = cls.newInstance();
        Method[] methods = cls.getDeclaredMethods();
        for (Method method : methods){
            if (method.isAnnotationPresent(AutoRun.class)){
                System.out.println(method.getName()+"被@AutoRun标注了！");
                method.invoke(o);
            }else {
                System.out.println(method.getName()+"没有被@AutoRun标注！！！！！！");
            }
        }
    }
}
